package com.xbongbong.pro.statistic.enums;

import com.xbongbong.i18n.util.I18nMessageUtil;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;

/**
 * 报表分类类型
 *
 * @author zcp
 * @date 2019/1/11
 */
@Getter
public enum ChartCategoryTypeEnum {
    /**
     * app首页特殊类，如新消息
     */
    APP_INDEX(1, "enum.chartCategoryType.name.app_index"),
    /**
     * 首页右侧动态看板分类
     */
    WEB_INDEX_RIGHT(2, "enum.chartCategoryType.name.web_index_right"),
    /**
     * 首页左侧分类
     */
    WEB_INDEX_LEFT(3, "enum.chartCategoryType.name.web_index_left"),
    /**
     * 图表中心系统分类
     */
    CHART_CENTER_SYSTEM(4, "enum.chartCategoryType.name.chart_center_system"),
    /**
     * 图表中心新建的分类
     */
    CHART_CENTER_CUSTOM(5, "enum.chartCategoryType.name.chart_center_custom"),

    /**
     * 图表中心绩效PK
     */
    PK_USER(6, "enum.chartCategoryType.name.pk_user"),
    /**
     * 图表中心绩效PK
     */
    PK_DEP(61, "enum.chartCategoryType.name.pk_dep"),
    /**
     * 自定义pk，一级分类还是在绩效pk
     */
    PK_CUSTOM(62, "enum.chartCategoryType.name.pk_custom"),
    /**
     * 目标完成情况
     */
    PERFORMANCE(7, "enum.chartCategoryType.name.performance"),
    /**
     * 自定义目标完成情况
     */
    PERFORMANCE_CUSTOM(71, "enum.chartCategoryType.name.performance_custom"),
    /**
     * 呼叫中心
     */
    CALL_CENTER(8, "enum.chartCategoryType.name.call_center"),
    /**
     * 仪表盘
     */
    DASHBOARD(9, "enum.chartCategoryType.name.dashboard"),
    /**
     * 经销商
     */
    DISTRIBUTOR(10,"enum.chartCategoryType.name.distributor"),
    /**
     * 工单分析
     */
    WORK_ORDER_V2(11,"enum.chartCategoryType.name.distributor"),
    /**
     * 回执单分析
     */
    RECEIPT_ORDER(12,"enum.chartCategoryType.name.distributor"),
    /*
     * 未知类型
     */
    UNKNOWN(404, "enum.chartCategoryType.name.unknown");

    /**
     * 分类类型code值，对应tb_chart_category内的type值
     */
    private int code;
    /**
     * 类型描述
     */
    private String name;

    ChartCategoryTypeEnum(int code, String name) {
        this.code = code;
        this.name = name;
    }

    /**
     * 通过code获取枚举
     * @param code 枚举code值
     * @return com.xbongbong.pro.enums.ChartCategoryTypeEnum
     * @author zcp
     * @date 2019/1/15 15:46
     * @since v1.0
     * @version v1.0
     */
    public static ChartCategoryTypeEnum getEnumByCode(int code){
        for (ChartCategoryTypeEnum cache: values()){
            if (cache.getCode() == code) {
                return cache;
            }
        }
        return UNKNOWN;
    }

    /**
     * 获取所有的code列表：app首页的、web首页的、图表中心的
     * @return java.util.List<java.lang.Integer>
     * @author zcp
     * @date 2019/1/15 19:57
     * @since v1.0
     * @version v1.0
     */
    public static List<Integer> getCodeList4All() {
        List<Integer> typeIn = new ArrayList<>();
        for (ChartCategoryTypeEnum cache: values()){
            if (cache == UNKNOWN) {
                //跳过未知类型
                continue;
            }
            typeIn.add(cache.code);
        }
        return typeIn;
    }
    /**
     * 获取web首页和图表中心分类：web左右侧、图表中心系统分类、图表中心自定义分类
     * 无目标完成情况、无呼叫中心
     * @return java.util.List<java.lang.Integer>
     * @author zcp
     * @date 2019/1/15 20:10
     * @since v1.0
     * @version v1.0
     */
    public static List<Integer> getCodeList4WebIndex(){
        List<Integer> list = new ArrayList<>();
        list.add(WEB_INDEX_RIGHT.code);
        list.add(WEB_INDEX_LEFT.code);
        list.add(CHART_CENTER_SYSTEM.code);
        list.add(CHART_CENTER_CUSTOM.code);
        list.add(DASHBOARD.code);
        return list;
    }
    /**
     * 获取web端图表中心分类：图表中心系统分类、图表中心自定义分类、目标完成情况、呼叫中心
     * @return java.util.List<java.lang.Integer>
     * @author zcp
     * @date 2019/1/15 20:11
     * @since v1.0
     * @version v1.0
     */
    public static List<Integer> getCodeList4WebChartCenter(){
        List<Integer> list = new ArrayList<>();
        list.add(CHART_CENTER_SYSTEM.code);
        list.add(CHART_CENTER_CUSTOM.code);
        list.add(PK_USER.code);
        list.add(PK_DEP.code);
        list.add(PK_CUSTOM.code);
        list.add(PERFORMANCE.code);
        list.add(PERFORMANCE_CUSTOM.code);
        list.add(CALL_CENTER.code);
        list.add(DASHBOARD.code);
        list.add(WORK_ORDER_V2.code);
        list.add(RECEIPT_ORDER.code);
        return list;
    }
    /**
     * 获取app端图表中心分类：图表中心系统分类、图表中心自定义分类
     * 无呼叫中心
     * @return java.util.List<java.lang.Integer>
     * @author zcp
     * @date 2019/1/30 9:33
     * @since v1.0
     * @version v1.0
     */
    public static List<Integer> getCodeList4AppChartCenter(){
        List<Integer> list = new ArrayList<>();
        list.add(CHART_CENTER_CUSTOM.code);
        list.add(CHART_CENTER_SYSTEM.code);
        list.add(PK_USER.code);
        list.add(PK_DEP.code);
        list.add(PERFORMANCE.code);
        list.add(CALL_CENTER.code);
        list.add(DASHBOARD.code);
        list.add(WORK_ORDER_V2.code);
        list.add(RECEIPT_ORDER.code);
        return list;
    }

    /**
     * 获取系统分类：不包含自定义分类
     *
     * @return java.util.List<java.lang.Integer>
     * @author 徐俊杰
     * @date 2019/1/23 16:11
     * @since v1.0
     */
    public static List<Integer> getCodeList4Init() {
        List<Integer> list = new ArrayList<>();
        for (ChartCategoryTypeEnum cache : values()) {
            //排除自定义和未知
            if (cache == CHART_CENTER_CUSTOM || cache == UNKNOWN || cache == DASHBOARD || cache == PK_CUSTOM || cache == PERFORMANCE_CUSTOM) {
                continue;
            }
            list.add(cache.code);
        }
        return list;
    }

    /**
     * 获取系统分类：首页右侧动态看板分类、首页左侧分类、移动端特殊分类
     *
     * @return java.util.List<java.lang.Integer>
     * @author 徐俊杰
     * @date 2019/2/28 14:35
     * @since v1.0
     */
    public static List<Integer> getCodeList4Home() {
        List<Integer> list = new ArrayList<>();
        list.add(APP_INDEX.code);
        list.add(WEB_INDEX_LEFT.code);
        list.add(WEB_INDEX_RIGHT.code);
        return list;
    }
    /**
     * 在首页的图表中心的分类
     * @return java.util.List<java.lang.Integer>
     * @author zcp
     * @date 2019/3/19 11:19
     * @since v1.0
     * @version v1.0
     */
    public static List<Integer> getCodeList4HomeCenter() {
        List<Integer> list = new ArrayList<>();
        list.add(CHART_CENTER_SYSTEM.code);
        list.add(CHART_CENTER_CUSTOM.code);
        list.add(DASHBOARD.code);
        return list;
    }

    public String getName() {
        return I18nMessageUtil.getMessage(name);
    }
}
